import { group } from 'console';
import { Context, Schema } from 'koishi'
import {} from 'koishi-plugin-adapter-onebot';

export const name = 'cron-guildname-change'

export interface Config {
  enable_agc_command: boolean; // 是否启用 agc 命令

  dt: number;
  p: number;

  arr: string[];
  guildId: string;

  enableKeywordDetect: boolean;
  keywordList: string[];
  guildNameTemplate: string;
}

export const Config: Schema<Config> = Schema.intersect([

  Schema.object({
    enable_agc_command: Schema.boolean()
      .default(true)
      .description("[debug]是否启用 agc 命令.")
  }).description("[debug]"),

  Schema.object({
    dt: Schema.number()
      .default(60000)
      .description("每隔多少ms执行一次"),
    p: Schema.number()
      .default(0.1)
      .min(0).max(1).step(0.01)
      .description("更改群名的可能性，0-1之间，默认0.1。"),
    arr: Schema.array(String)
// (*≧▽≦) MC撒欢群！（2群）
      .default(["(*≧▽≦) MC撒欢群！","(*≧▽≦) CS撒欢群！"])
      .description("群名候选列表。"),
    guildId: Schema.string()
      .default("259248174")
      .description("指定的换群名的群组ID。"),
    enableKeywordDetect: Schema.boolean()
      .default(false)
      .description("是否启用 检测关键词改群名"),
    keywordList: Schema.array(String)
      .default(["MC", "CS"])
      .description("关键词检测列表"),
    guildNameTemplate: Schema.string()
      .default("(*≧▽≦) %撒欢群！")
      .description("群名模板"),
  }).description("基础设置")

])

export function apply(ctx: Context, config: Config) {
  let i:number = 0;

  if ( config.enable_agc_command ) {
    ctx.command('agc', 'test')
      .alias('awa_guildname_change')
      .action( async ( { session } ) => {

        await session.onebot._request(
          'set_group_name',
          {
            group_id: session.guildId,
            group_name: config.arr[i]
          }
        )
        i = (i + 1) % config.arr.length;

      })
  }

  ctx.setInterval(async () => {

    try {

      // 根据概率 p 判断是否更改群名
      if (Math.random() < config.p) {
        i = (i + 1) % config.arr.length;
        const newGroupName = config.arr[i];

        ctx.logger.info(`尝试更改群组 ${config.guildId} 的群名为: ${newGroupName}`);

        const onebotBot = ctx.bots.find(bot => bot.platform === "onebot");

        await onebotBot.internal._request(
          'set_group_name',
          {
            group_id: config.guildId,
            group_name: newGroupName
          }
        )

        ctx.logger.info(`成功更改群组 ${config.guildId} 的群名为: ${newGroupName}`);
      }
    } catch (error) {
      ctx.logger.warn(`定时任务在处理群组${config.guildId} 时发生错误:`, error);
    }

  }, config.dt); // 使用配置中定义的 dt 毫秒作为间隔

  if ( config.enableKeywordDetect )
    ctx.on('message', async (session)=>{
      if ( session.guildId !== config.guildId ) return;
      let hit: boolean = false;
      let hitKeyword: string = "";
      for ( const s of config.keywordList ){
        if ( session.content.toLocaleLowerCase().includes(s.toLocaleLowerCase())){
          hit = true;
          hitKeyword = s;
        }
      }

      if ( hit === false ) return;

      await session.onebot._request(
          'set_group_name',
          {
            group_id: session.guildId,
            group_name: config.guildNameTemplate.replace('%', hitKeyword)
          }
        )


    })
}
